package com.zang.everyday;

/**
 * @Author: ZVerify
 * @Description: https://leetcode.cn/problems/swap-adjacent-in-lr-string/
 * @DateTime: 2022/10/2 9:14
 **/
public class 在LR字符串中交换相邻字符 {
    // 这个每日不看题解是真想不到

    public boolean canTransform (String start, String end){

        // 如果不相等直接返回false
        if (start.length() != end.length()) {
            return false;
        }

        // 标记两个指针初始点
        int s = 0;
        int e = 0;

        // 遍历两个字符串
        while (s < start.length() && e < end.length()) {
            // 跳过路过的X
            while (s < start.length() && start.charAt(s) == 'X') {
                s++;
            }
            while (e < end.length() && end.charAt(e) == 'X') {
                e++;
            }
            if (s < start.length() && e < end.length()) {
                // 他们只能和X交换位置所以两个字符串可以替换的话就得RL顺序一样
                if (start.charAt(s) != end.charAt(e)) {
                    return false;
                }
                // 如果相等的话拿到当前需要变换的字符串的值
                char charAt = start.charAt(s);
                // 想一下当前的值如果为R则只能往右移，但是如果现在要变换的字符串中R的坐标在后来的右边当然转换不过去了
                if ((charAt == 'R' && s > e) || (charAt == 'L' && s < e)) {
                    return false;
                }
                s++;
                e++;
            }
        }
        // 如果当前有一个指针遍历完了那么另一个如果再出现非X的值也是false
        while (s < start.length()) {
            if (start.charAt(s) != 'X') {
                return false;
            }
            s++;
        }

        while (e < start.length()) {
            if (end.charAt(e) != 'X') {
                return false;
            }
            e++;
        }
        return true;
    }
}
